=Introduction=

=Hardware=
{| border="0" cellpadding="10" width="100%"
|-
|width="32%" valign="top" align="left"|
==Blue Print==


===Block Diagram===


===Specifications===


===Module Size===

===Layout===
# U8207 Fix PCB footprint
# SMT Column change to 2mm(3.7mm PCB footprint)
# Add Bead B1 to M.2 RF module VDD from Battery
# Add nmos Q5009,Q5010 to D1,D2 signal
# Add R9338 for NTC on board 
# change MCU VDD from VBAT to VCC_SYSIN
# change Battery CONN from 1.25mm Pitch to 1.5mm Pitch(1511)
# add R9339 0402
# change R9332,R9338 PCB footprint from 0402 to 0603
# move J54 0.3mm in PCB board
# Add Q5011,Q5012,R9340,R9341,C9998 for Disable Charger
# Add D5011,R9342,R9343,C9999 for Charger wakeup MCU
# del U103,C526,C287,C288
# Add J55,J56,J57
# change J7 Hole to 0.9mm

===BOM===
# change Battery CONN to 1.5mm Pitch(1511)
# add Q5009,Q5010
# change R9327,R3928 from 22R to 10K
# change R113 from 270K to 180K
# change R9330 from 120K to 180K
# del R9318
# del L6101
# add R9339 510R
# change R9294 from 240K to 110K
# change R9296 from 51K to 18K
# del L12
# del U103,C526,C287,C288

===GPIO Description===

{| class="wikitable" style="text-align:center"
|+RF Module
!Function
!GPIO
!Direction
!Description
|-
|RF_RST
|GPIO0_B0
|Output
|Active:H
|-
|RF_PWR_EN
|GPIO4_C2
|Output
|Active:H
|-
|RF_Airplane-mode_EN
|GPIO4_C4
|Output
|Active:L
|-
|RF_wakeup
|GPIO4_C3
|Output
|Active:H
|-
|}
{| class="wikitable" style="text-align:center"
|+5V Boost for USB HOST and HDMI
!Function
!GPIO
!Direction
!Description
|-
|Boost_EN
|GPIO4_D2
|Output
|Active:H
|-
|USB_PWR_EN
|GPIO0_A5
|Output
|Active:H
|-
|}
{| class="wikitable" style="text-align:center"
|+WiFi/BT
!Function
!GPIO
!Direction
!Description
|-
|WiFi_REG_EN
|GPIO2_B1
|Output
|Active:H
|-
|WiFi_Wake_Host
|GPIO2_B2
|Input
|Active:H
|-
|BT_Wake_Host
|GPIO2_C0
|Input
|Active:H
|-
|Host_Wake_BT
|GPIO2_C1
|Output
|Active:H
|-
|BT_RST
|GPIO2_B7
|Output
|Active:L
|-
|32K_CLK_OUT
|GPIO2_C6
|Output
|Active:Edge
|-
|SDIO_CLK
|GPIO2_B0
|Output
|Active:Edge
|-
|SDIO_CMD
|GPIO2_A7
|Input/Output
|Active:H
|-
|SDIO_D0
|GPIO2_A3
|Input/Output
|Active:H
|-
|SDIO_D1
|GPIO2_A4
|Input/Output
|Active:H
|-
|SDIO_D2
|GPIO2_A5
|Input/Output
|Active:H
|-
|SDIO_D3
|GPIO2_A6
|Input/Output
|Active:H
|-
|UART1_RX
|GPIO2_B3
|Input
|Active:L
|-
|UART1_TX
|GPIO2_B4
|Output
|Active:L
|-
|UART1_RTS
|GPIO2_B5
|Input
|Active:L
|-
|UART1_CTS
|GPIO2_B6
|Output
|Active:L
|-
|}
{| class="wikitable" style="text-align:center"
|+RGMII
!Function
!GPIO
!Direction
!Description
|-
|RGMII_MDC
|GPIO4_B6
|Output
|Active:Edge
|-
|RGMII_MDIO
|GPIO4_B7
|Input/Output
|Active:L
|-
|RGMII_INT
|GPIO3_D3
|Input
|Active:H
|-
|RGMII_RST
|GPIO4_C0
|Output
|Active:L
|-
|RGMII_MCLK
|GPIO4_C1
|Input
|Active:Edge
|-
|RGMII_TXEN
|GPIO4_A6
|Output
|Active:H
|-
|RGMII_TXCLK
|GPIO4_A0
|Output
|Active:Edge
|-
|RGMII_TXD0
|GPIO4_A4
|Output
|Active:H
|-
|RGMII_TXD1
|GPIO4_A5
|Output
|Active:H
|-
|RGMII_TXD2
|GPIO3_D6
|Output
|Active:H
|-
|RGMII_TXD3
|GPIO3_D7
|Output
|Active:H
|-
|RGMII_RXDV
|GPIO4_B1
|Input
|Active:H
|-
|RGMII_RXCLK
|GPIO4_A3
|Input
|Active:Edge
|-
|RGMII_RXD0
|GPIO4_A7
|Input
|Active:H
|-
|RGMII_RXD1
|GPIO4_B0
|Input
|Active:H
|-
|RGMII_RXD2
|GPIO4_A1
|Input
|Active:H
|-
|RGMII_RXD3
|GPIO4_A2
|Input
|Active:H
|-
|}
{| class="wikitable" style="text-align:center"
|+SGMII
!Function
!GPIO
!Direction
!Description
|-
|SGMII_MDC
|GPIO2_C3
|Output
|Active:Edge
|-
|SGMII_MDIO
|GPIO2_C4
|Input/Output
|Active:L
|-
|SGMII_INT
|GPIO3_C7
|Input
|Active:H
|-
|SGMII_RST
|GPIO3_C6
|Output
|Active:L
|-
|}
{| class="wikitable" style="text-align:center"
|+I2C
!Function
!GPIO
!Direction
!Description
|-
|I2C4_SCL
|GPIO4_B3
|Output
|Active:Edge
|-
|I2C4_SDA
|GPIO4_B2
|Input/Output
|Active:L
|-
|}
{| class="wikitable" style="text-align:center"
|+CAN
!Function
!GPIO
!Direction
!Description
|-
|CAN2_TX
|GPIO4_B5
|Output
|Active:L
|-
|CAN2_RX
|GPIO4_B4
|Input
|Active:L
|-
|}
{| class="wikitable" style="text-align:center"
|+UART
!Function
!GPIO
!Direction
!Description
|-
|UART9_TX
|GPIO4_C5
|Output
|Active:L
|-
|UART9_RX
|GPIO4_C6
|Input
|Active:L
|-
|UART3_TX
|GPIO1_A1
|Output
|Active:L
|-
|UART3_RX
|GPIO1_A0
|Input
|Active:L
|-
|}
{| class="wikitable" style="text-align:center"
|+LED
!Function
!GPIO
!Direction
!Description
|-
|LED1_PWM
|GPIO0_C7
|Output
|Active:H
|-
|LED2_PWM
|GPIO0_C4
|Output
|Active:H
|-
|}
{| class="wikitable" style="text-align:center"
|+IRDA
!Function
!GPIO
!Direction
!Description
|-
|IR_RX
|GPIO0_C6
|Output
|Active:H
|-
|}
{| class="wikitable" style="text-align:center"
|+Vcore PWM
!Function
!GPIO
!Direction
!Description
|-
|CPU_CORE_PWM
|GPIO0_C0
|Output
|Active:H
|-
|GPU_CORE_PWM
|GPIO0_C1
|Output
|Active:H
|-
|}
{| class="wikitable" style="text-align:center"
|+MCU
!Function
!GPIO
!Direction
!Description
|-
|UART4_TXD
|GPIO1_A6
|Output
|Active:L
|-
|UART4_RXD
|GPIO1_A4
|Input
|Active:L
|-
|PWR ON/#OFF STAT
|GPIO1_B2
|Output
|Active:H
|-
|}
{| class="wikitable" style="text-align:center"
|+Home Lite LED GPIO
!Function
!GPIO
!Direction
!Description
|-
|LINK_LED
|GPIO0_C4
|Output
|Active:H
|-
|Charge_LED
|GPIO0_C7
|Output
|Active:H
|-
|}

===Front View===
===Backend View===
===Side View===




==Test==

===Power Consumption===

{| class="wikitable" style="text-align:center"
|+Idle Mode(unit:Watt) 
!w/o HDMI, Ethernet, WIFI, 4G
!add HDMI
!add USB Hub(Mouse+Keyboard)
!add Ethernet 1
!add Ethernet 0
!add WIFI
!add 4G
|-
|1.65
|2.35
|.285
|3.6
|4.5
|5.2
|/
|-
|}

{| class="wikitable" style="text-align:center"
|+Work Mode(unit:Watt) - w/ HDMI, Ethernet, WIFI, USB Hub
!CPU Full Load(stress -c 4)
!GPU Heavy Load(glmark2 x3)
!Iperf Test(Ethernet)
!Iperf Test(Wifi)
!4G Download
!CPU + GPU + Iperf
|-
|7
|5.5
|5.5
|3.85
|/
|/
|-
|}
{| class="wikitable" style="text-align:center"
|+Power Consumption Benchmark(unit:Watt)
!G2L
!RK3328
!RK3399
|-
|2.4
|1.56
|2.3
|-
|}

===Iperf Throughput===
{| class="wikitable" style="text-align:center"
|+Ethernet 0 port(unit:Mbits/s)-TCP
!colspan="5"|Send
!colspan="5"|Receive
|-
|1
|2
|3
|4
|5
|1
|2
|3
|4
|5
|-
|-
|936
|925
|927
|928
|928
|937
|937
|937
|938
|938
|-
|}

{| class="wikitable" style="text-align:center"
|+Ethernet 1 port(unit:Mbits/s)-TCP
!colspan="5"|Send
!colspan="5"|Receive
|-
|1
|2
|3
|4
|5
|1
|2
|3
|4
|5
|-
|-
|927
|927
|926
|925
|929
|926
|937
|938
|937
|938
|}
{| class="wikitable" style="text-align:center"
|+Wifi(unit:Mbits/s)-TCP
!colspan="5"|Send
!colspan="5"|Receive
|-
|1
|2
|3
|4
|5
|1
|2
|3
|4
|5
|-
|-
|28.3
|25.8
|28.3
|26.8
|27.5
|26.5
|27.8
|28.5
|26.7
|28.9
|-
|}
{| class="wikitable" style="text-align:center"
|+Ethernet 0 port(unit:Mbits/s)-UDP(BER < 1%)
!colspan="5"|Send
!colspan="5"|Receive
|-
|1
|2
|3
|4
|5
|1
|2
|3
|4
|5
|-
|-
|898
|876
|836
|888
|845
|946
|948
|944
|946
|945
|-
|}

{| class="wikitable" style="text-align:center"
|+Ethernet 1 port(unit:Mbits/s)-UDP(BER < 1%)
!colspan="5"|Send
!colspan="5"|Receive
|-
|1
|2
|3
|4
|5
|1
|2
|3
|4
|5
|-
|-
|719
|709
|694
|518
|939
|953
|954
|953
|952
|952
|-
|}
{| class="wikitable" style="text-align:center"
|+Wifi(unit:Mbits/s)-UDP(BER < 1%)
!colspan="5"|Send
!colspan="5"|Receive
|-
|1
|2
|3
|4
|5
|1
|2
|3
|4
|5
|-
|-
|
|
|
|
|
|31.1
|28.6
|21.8
|32.1
|26.7
|-
|}
{| class="wikitable" style="text-align:center"
|+4G DL(unit:Mbps)
!colspan="5"|SpeedTest
|-
|1
|2
|3
|4
|5
|-
|-
|16.09
|25.99
|13.63
|25.25
|22.1
|-
|}
{| class="wikitable" style="text-align:center"
|+4G UL(unit:Mbps)
!colspan="5"|SpeedTest
|-
|1
|2
|3
|4
|5
|-
|-
|41.37
|41.05
|43.75
|39.94
|42.43
|-
|}

===PCIE Speed===

{| class="wikitable" style="text-align:center"
|+NVME(unit:MB/s) 
!Brand
!Model
!Type
!Write
!Read
|-
|Samsung
|MZ-VLW1280
|PM961
|190
|800
|-
|-
|Samsung
|MZ-VL22560
|PM9A1
|580
|800
|-
|}

===Environment Test===

{| class="wikitable" style="text-align:center"
|+High Temperature Operate
|-
|硬件版本
|NT2109A1
|-
|-
|软件版本
|Linux OpenWrt 4.19.172-pcat #1 SMP Sat Oct 9 17:02:20 CST 2021 aarch64 GNU/Linux
|-
|-
|测试设备
|TEMI580
|-
|-
|测试条件
|高温60度/湿度95% - 8小时
|-
|-
|供电
|5V Input
|-
|-
|待测物状态
|正常工作（无WIFI/4G,无电池）
|-
|-
|测试项目
|1.高温状态下冷启动20次
2.高温状态下上网功能正常
|-
|-
|测试结果
|PASS
|-
|}

{| class="wikitable" style="text-align:center"
|+Low Temperature Operate
|-
|硬件版本
|NT2109A1
|-
|-
|软件版本
|Linux OpenWrt 4.19.172-pcat #1 SMP Sat Oct 9 17:02:20 CST 2021 aarch64 GNU/Linux
|-
|-
|测试设备
|TEMI580
|-
|-
|测试条件
|低温零下35度 - 8小时
|-
|-
|供电
|5V Input
|-
|-
|待测物状态
|正常工作（无WIFI/4G,无电池）
|-
|-
|测试项目
|1.低温状态下冷启动20次
2.低温状态下上网功能正常
|-
|-
|测试结果
|PASS
|-
|}

{| class="wikitable" style="text-align:center"
|+High Temperature Storage
|-
|硬件版本
|NT2109A1
|-
|-
|软件版本
|Linux OpenWrt 4.19.172-pcat #1 SMP Sat Oct 9 17:02:20 CST 2021 aarch64 GNU/Linux
|-
|-
|测试设备
|TEMI580
|-
|-
|测试条件
|高温70度/湿度95% - 8小时
|-
|-
|供电
|无
|-
|-
|待测物状态
|未上电（无包装，有电池）
|-
|-
|测试项目
|1.高温存储后取出静置2小时，测试功能和电池
|-
|-
|测试结果
|PASS
|-
|}

==Tips==
===Set usb mode to host===
#otg_mode switching
 echo host > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode

===Battery protection board===
[[File:保护板.png]]

===Battery Connector===
#[[File:1D25.png]]
#[[File:1511.png]]
#[[File:XT30.png]]

===Fix samba not working on OpenWRT using kernel 4.19===
Use commands below:
<pre>
uci set samba4.@samba[0].disable_async_io=1
uci commit
</pre>

==build Android==
get rk3568_android image on ubuntu 18.04

#ref1: https://source.android.com/setup/build/initializing
#ref2: https://t.rock-chips.com/wiki.php?filename=%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91/Android

===pre install (u18)===
 sudo apt-get update
 sudo apt-get install -y device-tree-compiler openjdk-8-jdk git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5-dev lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig liblz4-tool libssl-dev bc expect

 #if you are on ubuntu20.04
 sudo apt-get install python-is-python3 

install `repo` command
 mkdir -p ~/bin
 curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
 chmod a+x ~/bin/repo
 echo 'PATH=~/bin:$PATH' >> .bashrc

===fetch code===
 repo init --repo-url https://github.com/aosp-mirror/tools_repo.git -u https://github.com/rockchip-toybrick/manifests.git -b develop-11.0 -m default.xml --depth=1

 .repo/repo/repo sync

===build===
 source build/envsetup.sh
 lunch
 #choose 24


 ./build.sh -AUCKu -d rk3568-gw

=Resource=
*[[User Manual]]

=Modem Firmware Update=
Please DON'T POWER OFF the device during the firmware updating! And make sure the device has enough battery power to finish the updating (above 30%).
===Quectel EM05===
 cd /tmp
 wget https://dl.photonicat.com/firmware/Quectel-EM05-update.tar.gz
 tar -xzf Quectel-EM05-update.tar.gz
 cd Quectel-EM05-update
 ./update.sh

===Quectel RM500U===
 cd /tmp
 wget https://dl.photonicat.com/firmware/RM500U-update.tar.gz
 tar -xzf RM500U-update.tar.gz
 cd RM500U-update
 ./update.sh

= 通讯协议 = 
== RK3568 与 电源充电控制板卡通讯协议 ==
===物理层协议===
*通过串口通讯，115200波特率，校验位无，数据位8位，停止位1位
====帧格式表====
{| class="wikitable sortable"
|-
! 起始位   !! 数据位 !! 校验位置 !! 结束位置
|-
|0xA5,一个字节长度||见数据位表，变长||数据位（从数据位开始到数据位结束）的CRC校验，2个字节长度，低位在前，高位在后||0x5A，一个字节长度
|}

=====数据位表=====
{| class="wikitable sortable"
|-
! 数据来源地址  !! 目的地址 !! 帧序号 !! 数据长度 (第5-6位) !! 数据命令以及数据内容
|-
|0x01表示第一块CPU板，0x02表示第二块CPU板，0x03表示第三块CPU板，'''目前只有一块RK3568 CPU 板子，只用到0x01'''；<br>'''0x81表示 电源充电控制板'''，一个字节||0x01表示第一块CPU板，0x02表示第二块CPU板，0x03表示第三块CPU板'''目前只有一块RK3568 CPU 板子，只用到0x01'''；<br>0x81表示 电源充电控制板'''；<br>0x80表示目的地址是广播给所有的CPU电路板，0xfe表示目的地址是所有的RA2E1电路板，0xff表示广播给系统中所有设备，其他地址备用，一个字节长度||主动发送数据设备没发送一次数据加一个，两个字节，低位在前，高位在后（大于0xffff，清零），接收需要返回数据同数据返回||数据命令以及数据内容部分数据长度，两个字节，低位在前，高位在后||见数据命令以及数据内容表，变长
|}

====数据命令以及数据内容表====     
{| class="wikitable sortable"
|-
! 命令序号（定长，两个字节低位在前，高位在后），第7-8位   !! 命令内容（变长，0到n个字节），第9位开始 !! 是否需要回复（定长，1个字节）
|-
|1，CPU发送心跳||无||1表示需要返回,0表示无需返回
|-
|2，RA2E1应答心跳||0（超过1分钟没有收到任何数据，RA2E1重启CPU）||0表示无需返回
|-
|3，CPU读取RA2E1硬件版本||数据长度0|1表示需要返回,0表示无需返回
|-
|4，RA2E1应答上传硬件版本||例如，"NT2109A2",8个字节长度||0表示无需返回
|-
|5，CPU读取RA2E1软件版本||无||1表示需要返回,0表示无需返回
|-
|6，RA2E1应答上传软件版本||例如，"RA2E1211214001",14个字节长度||0表示无需返回
|-
|7，RA2E1上报状态|| 电池电压（2个字节，低位在前，高位在后，单位mV）；充电器接口电压（2个字节，低位在前，高位在后，单位mV）；输入GPIO状态（2个字节，见GPIO输入状态表），输出GPIO状态（2个字节，见输出GPIO状态表）；系统时间（年、月、日、时、分、秒、礼拜（年两个字节，其余1个字节，一个8个字节））； RTC状态（1个字节，0表示RTC正常，1，RTC初始化异常，2，没有秒中断，3，没有分钟中断）；板子温度，一个字节长度，实际温度+40，比如：20表示，-20℃，60表示20℃||1表示需要返回,0表示无需返回
|-
|8，CP回复||无||1表示需要返回,0表示无需返回
|-
|9，CPU设置RA时间||年、月、日、时、分、秒（年2个字节，其他一个字节，一个7个字节）||1表示需要返回,0表示无需返回
|-
|10，RA2E1应答本||0数据正常，1错误||0表示无需返回
|-
|11，CPU设置定时开机时间||年、月、日、时、分、星期（年2个字节，其他一个字节，一个7个字节（星期匹配需要匹配每位，例如B00000101，表示周日和2定时开机）），匹配设置，1个字节(bit0:年匹配；bit1:月匹配；bit2:日匹配；bit3:时匹配；bit4:分匹配；bit5:星期匹配；'''1设置为匹配，0设置为不匹配，其中分匹配必须为1，否则忽略此定时开机时间''')（'''注：一次最多设置6个定时开机时间，并覆盖以前设置的开机时间，如果设置6个开机时间，此段数据长度位8*6=42个字节，也就是最长48个字节长度'''）||1表示需要返回,0表示无需返回
|-
|12，RA2E1应答||0数据正常，1错误||0表示无需返回
|-
|13，RA2E1发送关机命令||关机事件，一个字节，0，表示按键强制关机，1，表示电池低电压关机，2，表示升级前关机；3,其他关机||1表示需要返回,0表示无需返回
|-
|14，CPU应答||0数据正常，1错误||0表示无需返回
|-
|15，CPU发送关机命令||||1表示需要返回,0表示无需返回
|-
|16，RA2E1应答||0数据正常，1错误||0表示无需返回
|-
|17，RA2E1恢复出厂设置||||1表示需要返回,0表示无需返回
|-
|18，CPU应答||0数据正常，1错误||0表示无需返回
|-
|19，CPU发送设置看门狗时间命令||系统开启超时时间，一个字节；系统关机超时时间，一个字节；系统启动成功后，喂狗超时时间，一个字节||1表示需要返回,0表示无需返回
|-
|20，RA2E1应答||0数据正常，1错误||0表示无需返回
|-
|21，CPU发送设置充电开机配置||一个字节长度，0，插上充电器后，不自动开机（如果机器关机时因为低电压关机，此配置情况下，插上充电器后还开机），1、插上充电器后开机。其他数据无效||1表示需要返回,0表示无需返回
|-
|22，RA2E1应答||0数据正常，1错误||0表示无需返回
|-
|23，CPU设置电压阀值||电压高指示阀值，2个字节，默认3850；电压中指示阀值,默认3700；电压低指示阀值，3600；插充电器开机电压，默认3400；充电器在充电器电压阀值，4500；充电器不在时关机电池阀值，3450；工作中，电池电压低电压提示电压阀值，3600；充电器大电流充电电压阀值，4700；开机后，电池电压持续超过15分钟满电压阀值，4140。一共18个字节，默认电压正负1000mV值范围内设置有效，如设置超出范围则使用默认值 ||1表示需要返回,0表示无需返回
|-
|24，RA2E1应答||0数据正常，1错误||0表示无需返回
|-
|25，CPU设置网络指示灯状态||高电平持续时间（2个字节，单位10ms），低电平持续时间（2个字节，单位10ms），变换次数（2个字节，次数到达后，保持低电平，0表示一直高低电平变换） ||1表示需要返回,0表示无需返回
|-
|26，RA2E1应答||0数据正常，1错误||0表示无需返回
|-
|27，CPU读取RA2E1开机原因|| ||1表示需要返回,0表示无需返回
|-
|28，RA2E1U应答||一个字节，1，表示按键开机，2，表示定时开机，3,插上charge车载模式开机，4,低电压关机，插上charge后，电压满足条件开机5,无电池开机||0表示无需返回
|-
|127|| ||
|-
|128||||
|-
|129，CPU发送升级MCU固件指令|| ||1表示需要返回,0表示无需返回
|-
|130，RA2E1U应答||一个字节，0，表示正常，其他表示错误（正常时，MCU会发送请求关机指令，收到应答或者超时情况下，断开CPU电，并MCU重启，进入bootloader，进入升级流程）||0表示无需返回
|-
|131，MCU提出升级MCU固件|| ||1表示需要返回,0表示无需返回
|-
|132，CPU应答||一个字节，0，表示正常，其他表示错误（应答错误情况下，MCU和CPU退出更新MCU固件流程）||0表示无需返回
|-
|133，CPU 发送固件大小||4字节长度，低位在前，高位在后 ||1表示需要返回,0表示无需返回
|-
|134，MCU应答||一个字节，0，表示正常，其他表示错误（应答错误情况下，MCU和CPU退出更新MCU固件流程）||0表示无需返回
|-
|135，CPU 发送固件数据||见CPU发送代码数据给MCU数据内容表 ||1表示需要返回,0表示无需返回
|-
|136，MCU应答||MCU应答CPU发送代码数据给MCU表||0表示无需返回
|-
|137，CPU 发送数据升级完毕|| ||1表示需要返回,0表示无需返回
|-
|138，MCU应答||一个字节，0，表示正常，其他表示错误||0表示无需返回
|-
|139，CPU 获取硬件GPIO状态|| ||1表示需要返回,0表示无需返回
|-
|140，MCU应答||一个字节，bit0，bit1,bit2分别代表P012，P102，P103电平状态，其他预留||0表示无需返回
|-
|141，CPU设置充电时读取电压时间间隔||一个字节长度，单位10S,默认30（即：300S,5分钟） ||1表示需要返回,0表示无需返回
|-
|142，MCU应答||一个字节，0，表示正常，其他表示错误||0表示无需返回
|-
|143，CPU设置充电电流||一个直接长度，0x01，关闭充电，0x02，小电流，0x03，大电流（'''注意：设置为大电流充电时，如果充电器电压低于设置的大电流充电阀值，还是使用小电流充电'''）||1表示需要返回,0表示无需返回
|-
|144，MCU应答||一个字节，0，表示正常，其他表示错误||0表示无需返回
|-
|145，CPU设置温度上限||rk关机温度，1个字节，默认75°，上限80°，下限55°；充电led提示不充电温度，1个字节，默认53°，上限60°，下限50°||1表示需要返回，0表示无需返回
|-
|-
|146，MCU应答||一个字节，0，表示正常，其他表示错误||0表示无需返回
|-
|}

=====CPU发送代码数据给CPU数据内容表=====
{| class="wikitable sortable"
|-
! 代码包序号 !! 代码数据 !! 校验
|-
|0x0001，两个字节，高位在前，表示第一包数据，依次递增||代码数据，128个字节，不够128字节补充0xff||代码数据位（128个字节）CRC16校验，两个字节长度，高位在前，低位在后
|}

=====MCU应答CPU发送代码数据表=====
{| class="wikitable sortable"
|-
! 代码包序号 !! 应答码
|-
|0x0001，两个字节，高位在前，表示第一包数据，依次递增||0x00表示数据正常，0x01表示错误(第一帧数据错误，MCU退出升级流程，CPU也退出升级流程)
|}

====GPIO输入状态表====
{| class="wikitable sortable"
|-
! 状态数据!! 说明 !! 备注
|-
|数据1,1个字节||bit0：WWAN_LED状态;bit1：RK PWR_STAT GPIO状态;bit2：BT_LED 状态;bit3：P012 GPIO状态;;bit4：WLAN GPIO 状态;bit5：P400 GPIO 状态;bit6：P102 GPIO状态;bit7：P103状态;
|-
|数据2,1个字节||bit6：充电IC D1 是否有变化状态，1有变化，0，无变化；bit7：充电IC D2 是否有变化状态，1有变化，0，无变化
|}

====GPIO输出状态表====
{| class="wikitable sortable"
|-
! 状态数据!! 说明 !! 备注
|-
|数据1,1个字节||bit0：PWR LED GPIO状态；bit1：LINK LED GPIO状态；bit2：BAT LED GPIO状态；bit3:RK 供电控制GPIO状态；bit4：POWER PATH SW控制GPIO状态；bit5：充电电流设置GPIO状态；bit6：RK download 控制GPIO状态
|-
|数据2,1个字节||
|}

= MCU功能描述 = 
=== 按键功能定义 ===
{| class="wikitable sortable"
|-
! 功能   !! 进入方式 !! 状态提示
|-
|开机||长按3秒||电源灯常亮
|-
|开机进入烧录模式||上电后等待6s左右后短按3下，再长按10秒以上||电源灯闪烁（0.25秒亮，0.25秒暗）
|-
|开机关闭看门狗||上电后等待6s左右后短按4下，再长按10秒以上||电源灯常亮，网络状态提示灯会闪烁一下
|-
|开机恢复出厂设置||上电后等待6s左右后短按1下，再长按17秒以上||电源灯闪烁（0.5秒亮，0.5秒暗）
|-
|系统复位||上电后等待6s左右后短按5下，再长按17秒以上||电源灯、网络灯、充电灯同时亮0.2秒后熄灭
|-
|关机||长按3秒||电源灯熄灭
|-
|查看电量||短按1下||3个LED灯全闪2下，根据电量显示，3灯再次全闪2下退出（电量划分参见电量定义表）
|-
|}

=== 电量定义表 ===
{| class="wikitable sortable"
|-
! 电量定义 !! 对应电压 !! 状态提示
|-
|High(工作状态）|| 4.2 ~ 3.85V || 3灯常亮
|-
|Mid(工作状态）|| 3.85 ~3.7V || 网络状态灯、充电灯常亮
|-
|Low(工作状态）|| 3.7 ~ 3.6V || 充电灯常亮
|-
|Critical(工作状态）|| <3.6V || 充电灯闪烁
|-
|High(关机状态）|| 4.2 ~ 3.9V || 3灯常亮
|-
|Mid(关机状态）|| 3.9 ~3.75V || 网络状态灯、充电灯常亮
|-
|Low(关机状态）|| 3.75 ~ 3.65V || 充电灯常亮
|-
|Critical(关机状态）|| <3.65V || 充电灯闪烁
|-
|}

=== 开关机电压定义表 ===
{| class="wikitable sortable"
|-
! 功能 !! 对应电压 !! 状态提示
|-
|开机（电池）||  > 3.65V || 小于3.65V无法开机
|-
|开机（电源适配器）|| > 3.4V || 小于3.4V无法开机
|-
|rowspan=2|低电压关机|| < 3.45V(1分钟均值) || 电源灯熄灭
|-
|< 3.6V(1分钟均值) 建议 || 电源灯熄灭
|-
|}

=== 车载模式工作定义表 ===
{| class="wikitable sortable"
|-
! 功能 !! 说明
|-
|开机 ||  插上充电器
|-
|关机 || 拔出充电器
|-
|无充电器状态下开机 || 长按3秒按键正常开机流程，开机后在充电器保持未插入的状态下不再主动关机，插入再拔出充电器后根据车载模式正常工作（逻辑在CPU上）
|-
|-
|有充电器状态下关机 || 长按3秒按键正常关机流程，关机后在充电器保持现有状态的情况下不再主动开机，拔出再插入充电器后根据车载模式正常工作（逻辑在MCU上）
|-
|}
Notes: 车载模式下定时开关机策略不生效
=== 家庭版（无电池）功能删减定义 (基于A2版硬件)===
{| class="wikitable sortable"
|-
! 功能点 !! 说明
|-
|查看电量||  取消
|-
|充电提示 || 取消
|-
|工作中低电量提示 || 取消
|-
|工作中低电量关机  || 取消
|-
|电池低电量无法开机 || 取消
|-
|定时开关机 || 取消
|-
|车载模式 || 取消
|-
|电池电压读取上报 || 取消
|-
|进入烧录模式 || 变更为开机时长按电源键9秒进入
|-
|进入恢复出厂模式 || 变更为开机后等待2秒再长按16秒进入
|-
|开机方式 || 变更为5V供电后直接开机
|-
|关机方式 || 变更为5V掉电后直接关机
|-
|}
#Notes：对应Web管理页面电量显示、充电提示和定时开关机模式等功能取消，建议MCU上报不同硬件版本。
#Notes：非家庭版的软件版本：RA2E1220702001。
#Notes：家庭版的软件版本：RA2E1220728001_HOME。
= 不良现象调试信息 = 
=== 网络服务卡死 ===
#出现此现象时获取系统信息如下：
## dmesg信息显示wmi command 20488 timeout, restarting hardware和sdio irq disable request timed out(完整信息详见附件log)
## 查看cat /proc/interrupts | grep dw-mci,每秒中断增加近百万次
## CPU占用率99%
## 查看任何网络相关指令无响应，无法中断（例如ifoncifg等）
::[https://w.g77k.com/images/2/2c/Dmesg_wifi_sdio_fail_d039.txt log:dmesg_wifi_sdio_fail_d039.txt]
#SDIO CLK
::*测试样机系统版本：Linux photonicat-openwrt 6.1.8 #0 SMP Thu Mar  2 05:46:17 2023 aarch64 GNU/Linux（wifi fw no sleep)
::*WIFI模组SDIO CLK 375KHz
[[file:sdio_clk_375khz_618_20230302_fw_nosleep_d039_poweron.png|center|]]
::*WIFI模组SDIO CLK 50MHz
[[file:sdio_clk_50mhz_618_20230302_fw_nosleep_d039.png|center|]]
::*WIFI模组SDIO CLK 150MHz - 幅度偏小，峰峰值只有1V左右
[[file:sdio_clk_150mhz_618_20230302_fw_nosleep_d039.png|center|]]
*开关多核
**关闭:<code>echo 0 > /sys/devices/system/cpu/cpu1/online</code>
**开启:<code>echo 1 > /sys/devices/system/cpu/cpu1/online</code>

= 无电池改装 = 
*删除B1(下图红框内）MPZ2012S300AT000 0805 30ohm@100MHz 6A
*增加L12（下图蓝框内） 2.2uH 4mmx4mm 饱和电流>3A

[[File:no-battery-wiki.png]]